package com.rceeslca.modules.cam.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rceeslca.common.exception.RceesLcaException;
import com.rceeslca.modules.cam.dao.CamCourseDao;
import com.rceeslca.modules.cam.dao.CamCourseItemDao;
import com.rceeslca.modules.cam.entity.CamCourse;
import com.rceeslca.modules.cam.entity.CamCourseItem;
import com.rceeslca.modules.cam.service.CamTeacherService;
import com.rceeslca.modules.cam.vo.AttenCourseVo;
import com.rceeslca.modules.cam.vo.CamTeacherCourseVo;
import com.rceeslca.modules.security.user.UserDetail;
import lombok.AllArgsConstructor;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * 教师
 */
@Service
@AllArgsConstructor
public class CamTeacherServiceImpl implements CamTeacherService {

    @Autowired
    private CamCourseDao courseDao;

    @Autowired
    private CamCourseItemDao courseItemDao;


    /**
     * 分页查询课程
     * @param page 分页
     * @param param 参数
     */
    @Override
    public IPage<CamTeacherCourseVo> pageCourse(Page<CamTeacherCourseVo> page, CamTeacherCourseVo param) {

        //当前用户
        UserDetail user = (UserDetail) SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();
        return courseDao.pageSelectTeacherCourse(page,null,user.getId());
    }


    /**
     * 开始考勤
     * @param param 参数
     */
    @Override
    public void startCheck(CamCourseItem param) {
        Date nowTime = new Date();
        CamCourse course = courseDao.selectById(param.getCourseId());
        if(course!=null){
            if(course.getStatus()==0){
                course.setStatus(1);
                course.setStartTime(nowTime);
                courseDao.updateById(course);
            }else if(course.getStatus()==1){
                throw new RceesLcaException("考勤已开始");
            }else{
                throw new RceesLcaException("考勤已结束");
            }
        }else{
            throw new RceesLcaException("课程不存在");
        }
    }


    /**
     * 结束考勤
     * @param param 参数
     */
    @Override
    public void endCheck(CamCourseItem param) {
        Date nowTime = new Date();
        CamCourse course = courseDao.selectById(param.getCourseId());
        if(course!=null){
            if(course.getStatus()==1){
                course.setStatus(2);
                course.setEndTime(nowTime);
                courseDao.updateById(course);
            }else if(course.getStatus()==0){
                throw new RceesLcaException("考勤未开始");
            }else{
                throw new RceesLcaException("考勤已结束");
            }
        }else{
            throw new RceesLcaException("课程不存在");
        }
    }


    /**
     * 同意请假
     * @param param 参数
     */
    @Override
    public void agreeLeave(AttenCourseVo param) {

        CamCourseItem itemEntity = courseItemDao.selectById(param.getCourseItemId());
        if(itemEntity!=null){
            if(itemEntity.getOperation()!=null&&itemEntity.getOperation().equals("leave")){
                if(itemEntity.getOperationResult()==null){
                    itemEntity.setOperationResult("success");
                    itemEntity.setOperationFinishTime(new Date());
                    courseItemDao.updateById(itemEntity);
                }else{
                    throw new RceesLcaException("请假数据已审批");
                }
            }else{
                throw new RceesLcaException("请假数据不存在");
            }
        }else{
            throw new RceesLcaException("请假数据不存在");
        }
    }


    /**
     * 拒绝请假
     * @param param 参数
     */
    @Override
    public void refuseLeave(AttenCourseVo param) {
        CamCourseItem itemEntity = courseItemDao.selectById(param.getCourseItemId());
        if(itemEntity!=null){
            if(itemEntity.getOperation()!=null&&itemEntity.getOperation().equals("leave")){
                if(itemEntity.getOperationResult()==null){
                    itemEntity.setOperationResult("fail");
                    itemEntity.setOperationFinishTime(new Date());
                    courseItemDao.updateById(itemEntity);
                }else{
                    throw new RceesLcaException("请假数据已审批");
                }
            }else{
                throw new RceesLcaException("请假数据不存在");
            }
        }else{
            throw new RceesLcaException("请假数据不存在");
        }
    }

}
